package com.yaojiaxun.logisticsPlatformSystem.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.yaojiaxun.logisticsPlatformSystem.dto.CertificateInfoDTO;
import com.yaojiaxun.logisticsPlatformSystem.dto.PageDTO;
import com.yaojiaxun.logisticsPlatformSystem.entity.CertificateInfo;
import com.yaojiaxun.logisticsPlatformSystem.mapper.CertificateInfoMapper;
import com.yaojiaxun.logisticsPlatformSystem.util.SnowFlakeIDWorker;
import com.yaojiaxun.logisticsPlatformSystem.util.TimeFormat;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.Instant;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @Auther: yjx_j
 * @Date: 2019/1/22 10:59
 * @Description:
 */
@Service
public class CertificateInfoService {

    @Autowired
    CertificateInfoMapper certificateInfoMapper;

    public Boolean addCertificateInfo(CertificateInfo certificateInfo){
        certificateInfo.setCertificateId(new SnowFlakeIDWorker(4, 1).nextId());
        certificateInfo.setCreateTime(Instant.now().toEpochMilli());
        certificateInfo.setUpdateTime(Instant.now().toEpochMilli());
        return certificateInfoMapper.addCertificate(certificateInfo)>0;
    }

    public void deleteCertificateInfo(Long certificateId){
        certificateInfoMapper.deleteCertificateById(certificateId);
    }

    public CertificateInfo findCertificateById(Long certificateId){
        return certificateInfoMapper.findCertificateById(certificateId);
    }

    public Boolean updateCertificate(CertificateInfo certificateInfo){
        certificateInfo.setUpdateTime(Instant.now().toEpochMilli());
        return certificateInfoMapper.updateCertificate(certificateInfo)>0;
    }

    public CertificateInfoDTO beanToDTO(CertificateInfo certificateInfo){
        if (certificateInfo == null)
            return null;
        CertificateInfoDTO certificateInfoDTO = new CertificateInfoDTO();
        BeanUtils.copyProperties(certificateInfo, certificateInfoDTO);
        certificateInfoDTO.setCreateTime(TimeFormat.convertTime(certificateInfo.getCreateTime()));
        certificateInfoDTO.setUpdateTime(TimeFormat.convertTime(certificateInfo.getUpdateTime()));
        return certificateInfoDTO;
    }

    public PageDTO<CertificateInfoDTO> findPage(Integer pageNum){
        PageDTO<CertificateInfoDTO> pageDTO = new PageDTO<>();
        Page<CertificateInfoDTO> page = new Page<>(pageNum, 10);
        List<CertificateInfoDTO> results = certificateInfoMapper.selectPage(page, null).stream().map(this::beanToDTO).collect(Collectors.toList());
        pageDTO.setPage(page);
        pageDTO.setResult(results);
        return pageDTO;
    }

    public CertificateInfo findCertificateByComName(String comName){
        return certificateInfoMapper.findCertificateByComName(comName);
    }
}
